﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using PSE.Tools.Util.Entidades;
using System.Data;
using CustomControls.Grid;

using Apresentacao = PSE.Tools.CadastroMensagens.Apresentacao;
using Negocio = PSE.Tools.CadastroMensagens.Negocio;
using Entidades = PSE.Tools.CadastroMensagens.Entidades;

using NegocioProdutos = PSE.Tools.CadastroProdutos.Negocio;
using EntidadesProdutos = PSE.Tools.CadastroProdutos.Entidades;
using System.Web.Services;
using System.Collections;

namespace Web.Paginas
{
    /// <summary>
    /// MensagensResources
    /// </summary>
    public partial class MensagensResources : Base.PaginaBase, Apresentacao.IApresentacao
    {
        #region [ Variaveis ]

        private Apresentacao.MensagensResources _apresentacao;

        public Entidades.ResourceFiltro resourceFiltro
        {
            get { return (Entidades.ResourceFiltro)this.ViewState["resourceFiltro"]; }
            set { this.ViewState["resourceFiltro"] = value; }
        }

        public Entidades.MensagemFiltro mensagemFiltro
        {
            get { return (Entidades.MensagemFiltro)this.ViewState["mensagemFiltro"]; }
            set { this.ViewState["mensagemFiltro"] = value; }
        }

        #endregion [ Variaveis ]

        #region [ Constantes ]

        const string idiomaPortugues = "pt-br";
        const string idiomaEspanhol = "es-es";
        const string idiomaIngles = "en-us";

        #endregion [ Constantes ]

        #region [ Construtores ]

        public MensagensResources()
        {
            _apresentacao = new Apresentacao.MensagensResources(this, new Negocio.Resources(), new Negocio.Mensagens());
        }

        #endregion [ Construtores ]

        #region [ Eventos ]

        protected void Page_Load(object sender, EventArgs e)
        {
            ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.lnkGrid); 
            
            if (!IsPostBack)
            {
                this.ProdutoSinacor.Visible = true;
                this.IniciaModulos();
                this.IniciaModuloXML();
                this.ExibirNomeUsuario();
                this.IniciaProfilesSalvos();
                this.IniciaTiposMensagem();
                this.IniciaStatusMensagem();

                this.ddlSelectProduto_SelectedIndexChanged(ddlSelectProduto, new EventArgs());
            }
        }

        /// <summary>
        /// selectProduto_SelectedIndexChanged
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlSelectProduto_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.LimparTela();

            ProdutoSinacor.Visible = ddlSelectProduto.SelectedValue.Equals("1");
            txtResourceKey1.Visible = ddlSelectProduto.SelectedValue.Equals("1");
        }

        /// <summary>
        /// grdview_RowCommand
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grdview_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int rowIndex = grdview.PageSize - (((grdview.PageIndex + 1) * grdview.PageSize) - int.Parse(e.CommandArgument.ToString()));
            int id = 0;

            if (!e.CommandArgument.Equals("Page"))
            {
                switch (e.CommandName)
                {
                    //Nova Resource Key
                    case "AddResourceKey":
                        this.NovoRegistro();
                        break;

                    //Alterar Resource Key selecionada
                    case "EditResourceKey":
                        this.AlterarRegistro(rowIndex);

                        ScriptManager.RegisterClientScriptBlock(this,
                                                                typeof(MensagensResources), "anchor",
                                                                "setTimeout(\"document.location.href='#anchorCampos'\",160);",
                                                                true);
                        break;

                    //Excluir Resource Key selecionada(s)
                    case "DelResourceKey":
                        id = int.Parse(this.grdview.DataKeys[rowIndex].Value.ToString());
                        this.Excluir(id);
                        grdview.DeleteRow(rowIndex);
                        break;

                    //Gerar Novo Resource Key Based-On
                    case "AddResourceKeyBased-On":
                        this.NovoRegistro();
                        this.ExibeDetalheRegistro(rowIndex);
                        this.TratarChaveInclusao();
                        break;

                    //Gerar Nova Message Based-On
                    case "AddMessageBased-On":
                        this.NovoRegistro();
                        break;

                    //Exportar Resultado da Pesquisa para Excel
                    case "ExpExcel":
                        String ids = String.Empty;

                        foreach (GridViewRow item in this.grdview.Rows)
                            ids += Server.HtmlDecode(this.grdview.Rows[item.RowIndex].Cells[1].Text) + ",";

                        ids = ids.Substring(0, ids.Length - 1);

                        ClientScript.RegisterClientScriptBlock(Page.GetType(), "script", "window.open('RelatorioExcel.aspx?id=" + ids + "');", true);
                        break;

                    default:
                        break;
                }
            }
        }

        /// <summary>
        /// xgrdResourcesMensagens_PageIndexChanging
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grdview_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grdview.PageIndex = e.NewPageIndex;
            this.PreencherGrid();
        }

        /// <summary>
        /// xgrdResourcesMensagens_Sorting
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grdview_Sorting(object sender, GridViewSortEventArgs e)
        {
            this.PreencherGrid();
            List<DTOGridResource> dataTable = this.grdview.DataSource as List<DTOGridResource>;
            this.grdview.DataSource = (this.grdview.DataSource as List<DTOGridResource>).Sort<DTOGridResource>(e.SortExpression + " " + e.SortDirection);
            this.grdview.DataBind();
        }

        private string ConvertSortDirectionToSql(SortDirection sortDirection)
        {
            string newSortDirection = String.Empty;

            switch (sortDirection)
            {
                case SortDirection.Ascending:
                    newSortDirection = "ASC";
                    break;

                case SortDirection.Descending:
                    newSortDirection = "DESC";
                    break;
            }

            return newSortDirection;
        }

        /// <summary>
        /// ibtAdicionar_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ibtAdicionar_Click(object sender, ImageClickEventArgs e)
        {
            this.pnlResourceMensagem2.Visible = true;
        }

        /// <summary>
        /// ibtDeletar_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ibtDeletar_Click(object sender, ImageClickEventArgs e)
        {
            this.pnlResourceMensagem2.Visible = false;
        }

        /// <summary>
        /// btnCancelar_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //protected void btnCancelar_Click(object sender, EventArgs e)
        //{
        //    this.ExibirPanelResMsg2(false);
        //    this.HabilitaSalvar(false);
        //}

        ///// <summary>
        ///// btnLimpar_Click
        ///// </summary>
        ///// <param name="sender"></param>
        ///// <param name="e"></param>
        //protected void btnLimpar_Click(object sender, EventArgs e)
        //{
        //    LimparTela();
        //}

        /// <summary>
        /// btnNovo_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNovo_Click(object sender, EventArgs e)
        {
            this.AlteraStatusPagina("I");
            this.NovoRegistro();
        }

        /// <summary>
        /// btnSalvar_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            this.Salvar();
        }

        /// <summary>
        /// ddlModulo_SelectedIndexChanged
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlModulo_SelectedIndexChanged(object sender, EventArgs e)
        {
            IniciaSubModulo();
        }

        /// <summary>
        /// grdView_RowDataBound
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grdview_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            GridView grd = (GridView)sender;
            if (e.Row.RowType == DataControlRowType.DataRow)
                e.Row.Attributes.Add("id", "linrc" + (grd.Rows.Count - 1).ToString());
        }

        /// <summary>
        /// xgrdResourcesMensagens_RowDoubleClick
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void xgrdResourcesMensagens_RowDoubleClick(object sender, RowDoubleClickEventArgs e)
        {
            //this.AlterarRegistro();
        }

        /// <summary>
        /// ibtExcluir_Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ibtExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int idResource = 0;
            int.TryParse(((ImageButton)sender).CommandArgument, out idResource);
            this.Excluir(idResource);
        }

        #endregion

        #region [ Métodos Privados ]

        /// <summary>
        /// AlteraStatusPagina
        /// </summary>
        private void AlteraStatusPagina(String strStatusPagina)
        {
            this.hidStatusPagina.Value = strStatusPagina;
        }

        /// <summary>
        /// ExibirNomeUsuario
        /// </summary>
        private void ExibirNomeUsuario()
        {
            this.litUsuario.Text = "Usuário: " + this.ObterLoginUsuario();
        }

        /// <summary>
        /// IniciaTiposMensagem
        /// </summary>
        private void IniciaTiposMensagem()
        {
            Negocio.TiposMensagens negocio = new Negocio.TiposMensagens();
            this.ddlTipoMensagem.DataBind(negocio.Selecionar(), "Descricao", "Id");
            this.ddlTipoMensagem.Items.Insert(0, new ListItem("", ""));

            this.ddlPesqTipoMensagem.DataBind(negocio.Selecionar(), "Descricao", "Id");
            this.ddlPesqTipoMensagem.Items.Insert(0, new ListItem("", ""));
        }

        /// <summary>
        /// IniciaStatusMensagem
        /// </summary>
        private void IniciaStatusMensagem()
        {
            Negocio.Mensagens negocio = new Negocio.Mensagens();
            this.ddlStatusMensagem.DataBind(negocio.ListarStatusMensagens(), "DescricaoValidada", "Validada");
            this.ddlStatusMensagem.Items.Insert(0, new ListItem("", ""));

            this.ddlPesqStatusMensagem.DataBind(negocio.ListarStatusMensagens(), "DescricaoValidada", "Validada");
            this.ddlPesqStatusMensagem.Items.Insert(0, new ListItem("", ""));
        }

        /// <summary>
        /// IniciaModulo
        /// </summary>
        private void IniciaModulos()
        {
            Negocio.Modulo negocio = new Negocio.Modulo();
            this.ddlModulo.DataBind(negocio.ListarModulo(), "Nome", "Id");
            this.ddlModulo.Items.Insert(0, new ListItem("", ""));

            this.ddlPesqModulo.DataBind(negocio.ListarModulo(), "Nome", "Id");
            this.ddlPesqModulo.Items.Insert(0, new ListItem("", ""));
        }

        private void IniciaModuloXML()
        {
            string caminho = AppDomain.CurrentDomain.BaseDirectory;
            Negocio.Modulo negocio = new Negocio.Modulo();
            negocio.GeradorXmlModuloSubModulo(caminho);
        }

        /// <summary>
        /// IniciaSubModulo
        /// </summary>
        private void IniciaSubModulo()
        {
            int idModulo = 0;
            if (int.TryParse(ddlModulo.SelectedValue, out idModulo))
            {
                Negocio.SubModulo negocio = new Negocio.SubModulo();
                this.ddlSubModulo.Items.Clear();
                this.ddlSubModulo.DataBind(negocio.ListarSubModuloPorModulo(idModulo), "Nome", "Id");
                this.ddlSubModulo.Items.Insert(0, new ListItem("", ""));
            }
            else
                ddlSubModulo.Items.Clear();
        }

        /// <summary>
        /// IniciaSubModulo
        /// </summary>
        [WebMethod]
        public static IList<Entidades.SubModulo> IniciaPesqSubModulo(int idModulo)
        {
            IList<Entidades.SubModulo> subModulos = null;
            if (idModulo > 0)
            {
                Negocio.SubModulo negocio = new Negocio.SubModulo();
                subModulos = negocio.ListarSubModuloPorModulo(idModulo);
            }
            return subModulos;
        }

        /// <summary>
        /// IniciaProfilesSalvos
        /// </summary>
        private void IniciaProfilesSalvos()
        {
            Negocio.Perfil negocio = new Negocio.Perfil();
            this.ddlProfilesSalvos.DataBind(negocio.Listar(this.ObterIdUsuarioPorLogin()), "PerfilSalvo", "PerfilSalvo");
            this.ddlProfilesSalvos.Items.Insert(0, new ListItem("", ""));

            if (this.ddlProfilesSalvos.Items.Count > 1)
                this.ddlProfilesSalvos.SelectedIndex = 1;
        }

        /// <summary>
        /// TratarChaveInclusao
        /// </summary>
        private void TratarChaveInclusao()
        {
            this.txtCodigoResourceKey1.Text = String.Empty;
            this.txtCodigoResourceKey1.Enabled = false;

            this.txtDescricaoResourceKey1.Text = String.Empty;

            this.hidCodigoMensagemPortugues1.Value = String.Empty;
            this.hidCodigoMensagemEspanhol1.Value = String.Empty;
            this.hidCodigoMensagemIngles1.Value = String.Empty;
        }

        /// <summary>
        /// ExibeDetalheRegistro
        /// </summary>
        private void ExibeDetalheRegistro(int rowIndex)
        {
            this.ProdutoSinacor.Visible = true;

            this.IniciaModulos();

            GridViewRow row = this.grdview.Rows[rowIndex];

            this.txtCodigoResourceKey1.Text = Server.HtmlDecode(row.Cells[0].Text);
            this.txtCodigoExcepMsg1.Text = Server.HtmlDecode(row.Cells[1].Text);

            String resourceKey = Server.HtmlDecode(row.Cells[2].Text);
            this.txtResourceKey1.Text = resourceKey.Substring(0, resourceKey.LastIndexOf('.'));

            this.txtDescricaoResourceKey1.Text = resourceKey.Substring((resourceKey.LastIndexOf('.') + 1));

            this.txtMensagemPortugues1.Text = Server.HtmlDecode(row.Cells[3].Text);
            //this.hidMensagemAnteriorPortugues1.Value = Server.HtmlDecode(row.Cells[3].Text);
            this.hidCodigoMensagemPortugues1.Value = Server.HtmlDecode(row.Cells[4].Text);

            this.txtMensagemEspanhol1.Text = Server.HtmlDecode(row.Cells[5].Text).Trim();
            //this.hidMensagemAnteriorEspanhol1.Value = Server.HtmlDecode(row.Cells[5].Text);
            this.hidCodigoMensagemEspanhol1.Value = Server.HtmlDecode(row.Cells[6].Text);

            this.txtMensagemIngles1.Text = Server.HtmlDecode(row.Cells[7].Text).Trim();
            //this.hidMensagemAnteriorIngles1.Value = Server.HtmlDecode(row.Cells[7].Text);
            this.hidCodigoMensagemIngles1.Value = Server.HtmlDecode(row.Cells[8].Text);

            this.ddlModulo.SelectedIndex = this.ddlModulo.Items.IndexOf(this.ddlModulo.Items.FindByText(Server.HtmlDecode(row.Cells[9].Text)));

            if (this.ddlModulo.SelectedIndex == 0)
                EnviarMensagemErro("O Módulo cadastrado não existe na base de dados");
            else
            {
                this.IniciaSubModulo();
                this.ddlSubModulo.SelectedIndex = this.ddlSubModulo.Items.IndexOf(this.ddlSubModulo.Items.FindByText(Server.HtmlDecode(row.Cells[10].Text)));

                if (this.ddlSubModulo.SelectedIndex == 0)
                    EnviarMensagemErro("O SubMódulo cadastrado não existe na base de dados");
            }

            ListItem statusMensagem = this.ddlStatusMensagem.Items.FindByText(Server.HtmlDecode(row.Cells[11].Text));
            if (!object.ReferenceEquals(statusMensagem, null))
                statusMensagem.Selected = true;

            try
            {
                ListItem tipoMensagem = this.ddlTipoMensagem.Items.FindByText(Server.HtmlDecode(row.Cells[12].Text));
                if (!object.ReferenceEquals(tipoMensagem, null))
                    tipoMensagem.Selected = true;
            }
            catch (Exception)
            {
                EnviarMensagemErro("O Tipo da Mensagem cadastrado não existe na base de dados");
            }

            this.txtPropositoMensagem1.Text = Server.HtmlDecode(row.Cells[13].Text);
        }

        /// <summary>
        /// IniciaGrid
        /// </summary>
        private void IniciaGrid(string[] parametros)
        {
            int idTipoMensagem = 0;
            string statusMensagem = String.Empty;
            string modulo = string.Empty;
            string subModulo = string.Empty;
            int idResource = 0;
            int idException = 0;
            DateTime? atualizadoEmInicio = new DateTime?();
            DateTime? atualizadoEmFim = new DateTime?();
            int? IdAtualizadoPor = 0;

            int.TryParse(parametros[0], out idTipoMensagem);

            if (!String.IsNullOrEmpty(parametros[1]))
                statusMensagem = (parametros[1] == "True") ? "S" : "N";

            if (!string.IsNullOrEmpty(parametros[2]))
                modulo = parametros[2];

            if (!string.IsNullOrEmpty(parametros[3]))
                subModulo = parametros[3];

            int.TryParse(parametros[4], out idResource);

            int.TryParse(parametros[5], out idException);

            if (!String.IsNullOrEmpty(parametros[8]))
                atualizadoEmInicio = DateTime.ParseExact(parametros[8] + " 00:00:00", "dd/MM/yyyy HH:mm:ss", null);

            if (!String.IsNullOrEmpty(parametros[9]))
                atualizadoEmFim = DateTime.ParseExact(parametros[9] + " 23:59:59", "dd/MM/yyyy HH:mm:ss", null);

            if (parametros[8].ToUpper().Equals("M"))
                IdAtualizadoPor = this.ObterIdUsuarioPorLogin();

            resourceFiltro = new Entidades.ResourceFiltro()
            {
                Id = idResource,
                NomeProduto = ddlSelectProduto.SelectedItem.Text,
                IdTipoMensagem = idTipoMensagem,
                Modulo = modulo,
                SubModulo = subModulo,
                IdException = idException,
                AtualizadoEmInicio = atualizadoEmInicio,
                AtualizadoEmFim = atualizadoEmFim,
                IdAtualizadoPor = IdAtualizadoPor
            };

            //************************************************************
            //colocar campos para busca por texto no popup
            mensagemFiltro = new Entidades.MensagemFiltro()
            {
                TextoMensagemPortugues = parametros[6],
                PropositoMensagem = parametros[7]
            };

            PreencherGrid();
        }

        private void PreencherGrid()
        {
            Negocio.Resources negocioResources = new Negocio.Resources();
            List<DTOGridResource> resources = new List<DTOGridResource>();

            resources.AddRange(negocioResources.Selecionar(resourceFiltro, mensagemFiltro).Select(r => new Base.PaginaBase.DTOGridResource
            {
                Id = r.Id,
                Exception = r.Excecao.Id,//negocioExcecoes.ObterPorResourceKey(r.ResourceKey),
                ResourceKey = r.ResourceKey,
                MensagemPortugues = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues).TextoMensagem,
                IdPortugues = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues).Id.ToString(),
                MensagemEspanhol = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaEspanhol) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaEspanhol).TextoMensagem,
                IdEspanhol = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaEspanhol) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaEspanhol).Id.ToString(),
                MensagemIngles = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaIngles) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaIngles).TextoMensagem,
                IdIngles = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaIngles) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaIngles).Id.ToString(),
                Modulo = r.Modulo.Nome,
                SubModulo = r.SubModulo.Nome,
                Status = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues).DescricaoValidada,
                TipoMensagem = r.TipoMensagem.Descricao,
                Proposito = r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues) == null ? string.Empty : r.ListaMensagens.Find(obj => obj.Idioma.Sigla == idiomaPortugues).Proposito,
            }));


            //retorno da base
            if (resources.Count == 0)
            {
                EnviarMensagemErro("Nenhum item encontrado");
                this.grdview.DataSource = null;

                grdview.DataSource = null;
            }
            else
                this.grdview.DataSource = resources;

            this.grdview.DataBind();
        }

        public void LimparTela()
        {
            this.LimparErros();
            this.LimparCampos(true);
            this.ExibirPanelResMsg2(false);
            this.HabilitaSalvar(true);
            this.grdview.DataSource = null;
            this.grdview.DataBind();
            this.grdview.DataSource = null;
            this.grdview.DataBind();
        }

        /// <summary>
        /// LimparErros
        /// </summary>
        private void LimparErros()
        {
            this.lblMensagem.Text = String.Empty;
        }

        /// <summary>
        /// LimparCampos
        /// </summary>
        private void LimparCampos(Boolean blnLimparPesquisa)
        {
            this.ddlTipoMensagem.SelectedIndex = -1;
            this.ddlStatusMensagem.SelectedIndex = -1;
            this.ddlModulo.SelectedIndex = -1;
            this.ddlSubModulo.SelectedIndex = -1;

            //Painel 1
            this.txtCodigoResourceKey1.Text = String.Empty;
            this.txtCodigoExcepMsg1.Text = String.Empty;

            this.hidCodigoMensagemPortugues1.Value = String.Empty;
            this.txtMensagemPortugues1.Text = String.Empty;

            this.hidCodigoMensagemEspanhol1.Value = String.Empty;
            this.txtMensagemEspanhol1.Text = String.Empty;

            this.hidCodigoMensagemIngles1.Value = String.Empty;
            this.txtMensagemIngles1.Text = String.Empty;

            this.txtPropositoMensagem1.Text = String.Empty;
            this.txtDescricaoResourceKey1.Text = String.Empty;
            this.txtResourceKey1.Text = String.Empty;

            //Painel 2
            //this.txtCodigoResourceKey2.Text = String.Empty;
            //this.txtCodigoExcepMsg2.Text = String.Empty;
            //this.txtMensagemPortugues2.Text = String.Empty;
            //this.txtMensagemEspanhol2.Text = String.Empty;
            //this.txtMensagemIngles2.Text = String.Empty;
            //this.txtPropositoMensagem2.Text = String.Empty;
            //this.txtDescricaoResourceKey2.Text = String.Empty;
            //this.txtResourceKey2.Text = String.Empty;

            //Limpar campos de pesquisa
            if (blnLimparPesquisa)
            {
                this.chkPesquisarData.Checked = false;
                this.txtDataInicio.Text = String.Empty;
                this.txtDataFim.Text = String.Empty;
                this.rbdUsuarios.SelectedIndex = -1;
            }
        }

        /// <summary>
        /// preencherDataUsuarioResource
        /// </summary>
        private void preencherDataUsuarioResource(ref Entidades.Resource resource)
        {
            switch (this.hidStatusPagina.Value)
            {
                case "A":
                    resource.AtualizadoEm = DateTime.Now;
                    resource.IdAtualizadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                case "I":
                    resource.CriadoEm = DateTime.Now;
                    resource.IdCriadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// preencherDataUsuarioMensagem
        /// </summary>
        private void preencherDataUsuarioMensagem(ref Entidades.Mensagem mensagem)
        {
            switch (this.hidStatusPagina.Value)
            {
                case "A":
                    mensagem.AtualizadoEm = DateTime.Now;
                    mensagem.IdAtualizadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                case "I":
                    mensagem.CriadoEm = DateTime.Now;
                    mensagem.IdCriadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// preencherDataUsuarioPerfil
        /// </summary>
        private void preencherDataUsuarioPerfil(ref Entidades.Perfil perfil)
        {
            switch (this.hidStatusPagina.Value)
            {
                case "A":
                    perfil.AtualizadoEm = DateTime.Now;
                    perfil.IdAtualizadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                case "I":
                    perfil.CriadoEm = DateTime.Now;
                    perfil.IdCriadoPor = this.ObterIdUsuarioPorLogin();
                    break;
                default:
                    break;
            }
        }

        private int ObterIdUsuarioPorLogin()
        {
            Negocio.Usuario negocioUsuario = new Negocio.Usuario();
            String[] dominioLogin = Context.User.Identity.Name.Split('\\');
            return negocioUsuario.ObterPorLogin(dominioLogin[1].ToLower()).Id;
        }

        private string ObterLoginUsuario()
        {
            String[] dominioLogin = Context.User.Identity.Name.Split('\\');
            return dominioLogin[1].ToLower();
        }

        /// <summary>
        /// PreencherResourceKey
        /// </summary>
        private String PreencherResourceKey(int panel)
        {
            string txtDescricaoResourceKey = String.Empty;
            string txtResourceKey = String.Empty;

            switch (panel)
            {
                case 1:
                    txtDescricaoResourceKey = this.txtDescricaoResourceKey1.Text;
                    txtResourceKey = this.txtResourceKey1.Text;
                    break;
                case 2:
                    txtDescricaoResourceKey = this.txtDescricaoResourceKey2.Text;
                    txtResourceKey = this.txtResourceKey2.Text;
                    break;
                default:
                    break;
            }

            string resourceKey = String.Empty;

            if ((!String.IsNullOrEmpty(txtDescricaoResourceKey)) && (!String.IsNullOrEmpty(txtResourceKey)))
                resourceKey = txtResourceKey + "." + txtDescricaoResourceKey;
            else
            {
                if (!String.IsNullOrEmpty(txtDescricaoResourceKey))
                    resourceKey = txtDescricaoResourceKey;

                if (!String.IsNullOrEmpty(txtResourceKey))
                    resourceKey = txtResourceKey;
            }

            return resourceKey;
        }

        /// <summary>
        /// Excluir
        /// </summary>
        private void Excluir(int id)
        {
            this.LimparErros();
            Entidades.Resource resource = new Entidades.Resource();
            resource.Id = id;
            _apresentacao.Excluir(resource);
        }

        /// <summary>
        /// Salvar
        /// </summary>
        private void Salvar()
        {
            Negocio.Idiomas negocioIdiomas = new Negocio.Idiomas();

            Entidades.Resource resource1 = new Entidades.Resource();
            {
                this.preencherDataUsuarioResource(ref resource1);

                int id = 0;
                int.TryParse(this.txtCodigoResourceKey1.Text, out id);
                resource1.Id = id;

                resource1.ListaMensagens = new List<Entidades.Mensagem>();

                resource1.Produto = new NegocioProdutos.Produtos().ObterPorId(Convert.ToInt16(ddlSelectProduto.SelectedValue));

                resource1.ResourceKey = PreencherResourceKey(1);

                int idTipoMensagem = 0;
                int.TryParse(ddlTipoMensagem.SelectedValue, out idTipoMensagem);

                resource1.TipoMensagem = new Negocio.TiposMensagens().ObterPorId(idTipoMensagem);
            };

            //Mensagem Português
            int idMensagemPortugues = 0;
            int.TryParse(this.hidCodigoMensagemPortugues1.Value, out idMensagemPortugues);

            Entidades.Mensagem mensagemPortugues1 = new Entidades.Mensagem();
            this.preencherDataUsuarioMensagem(ref mensagemPortugues1);

            mensagemPortugues1.Id = idMensagemPortugues;
            mensagemPortugues1.Proposito = this.txtPropositoMensagem1.Text;
            mensagemPortugues1.Idioma = negocioIdiomas.ObterPorSigla(idiomaPortugues);
            mensagemPortugues1.TextoMensagem = this.txtMensagemPortugues1.Text;
            mensagemPortugues1.Validada = this.chkValidarAuto.Checked;

            resource1.ListaMensagens.Add(mensagemPortugues1);

            ////Mensagem Espanhol
            int idMensagemEspanhol = 0;
            int.TryParse(this.hidCodigoMensagemEspanhol1.Value, out idMensagemEspanhol);

            Entidades.Mensagem mensagemEspanhol1 = new Entidades.Mensagem();
            this.preencherDataUsuarioMensagem(ref mensagemEspanhol1);

            mensagemEspanhol1.Id = idMensagemEspanhol;
            mensagemEspanhol1.Proposito = this.txtPropositoMensagem1.Text;
            mensagemEspanhol1.Idioma = negocioIdiomas.ObterPorSigla(idiomaEspanhol);
            mensagemEspanhol1.TextoMensagem = this.txtMensagemEspanhol1.Text;
            mensagemEspanhol1.Validada = this.chkValidarAuto.Checked;

            resource1.ListaMensagens.Add(mensagemEspanhol1);


            ////Mensagem Inglês
            int idMensagemIngles = 0;
            int.TryParse(this.hidCodigoMensagemIngles1.Value, out idMensagemIngles);

            Entidades.Mensagem mensagemIngles1 = new Entidades.Mensagem();
            this.preencherDataUsuarioMensagem(ref mensagemIngles1);

            mensagemIngles1.Id = idMensagemIngles;
            mensagemIngles1.Proposito = this.txtPropositoMensagem1.Text;
            mensagemIngles1.Idioma = negocioIdiomas.ObterPorSigla(idiomaIngles);
            mensagemIngles1.TextoMensagem = this.txtMensagemIngles1.Text;
            mensagemIngles1.Validada = this.chkValidarAuto.Checked;

            try
            {
                resource1.ListaMensagens.Add(mensagemIngles1);

                if (resource1.Id <= 0)
                {
                    if (_apresentacao.Inserir(resource1))
                        EnviarMensagem("alert('Mensagem inserida com sucesso!");
                }
                else
                {
                    if (_apresentacao.Atualizar(resource1))
                        EnviarMensagem("Mensagem alterada com sucesso!");

                    //Exibindo relatório de mensagens a serem validadas
                    //if ((this.txtMensagemPortugues1.Text != this.hidMensagemAnteriorPortugues1.Value) ||
                    //(this.txtMensagemEspanhol1.Text != this.hidMensagemAnteriorEspanhol1.Value) ||
                    //(this.txtMensagemIngles1.Text != this.hidMensagemAnteriorIngles1.Value))
                    //{
                    //    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "script", "abrepopup('RelatorioMensagens.aspx','1024','768','0','0','no','no','no','yes');", true);
                    //}
                }
            }
            catch (Exception ex)
            {
                EnviarMensagem("Ocorreram problemas com a gravação da mensagem!");
            }

            if (pnlResourceMensagem2.Visible)
            {
                Entidades.Resource resource2 = new Entidades.Resource();
                {
                    this.preencherDataUsuarioResource(ref resource2);

                    int id = 0;
                    int.TryParse(this.txtCodigoResourceKey2.Text, out id);
                    resource2.Id = id;

                    resource2.ListaMensagens = new List<Entidades.Mensagem>();

                    NegocioProdutos.Produtos negocioProdutos = new NegocioProdutos.Produtos();
                    resource2.Produto = negocioProdutos.ObterPorId(1);

                    resource2.ResourceKey = PreencherResourceKey(2);

                    int idTipoMensagem = 0;
                    int.TryParse(ddlTipoMensagem.SelectedValue, out idTipoMensagem);
                    Negocio.TiposMensagens negocioTiposProduto = new Negocio.TiposMensagens();
                    resource2.TipoMensagem = negocioTiposProduto.ObterPorId(idTipoMensagem);
                };

                //Mensagem Português
                Entidades.Mensagem mensagemPortugues2 = new Entidades.Mensagem();
                {
                    this.preencherDataUsuarioMensagem(ref mensagemPortugues2);
                    mensagemPortugues2.Proposito = this.txtPropositoMensagem2.Text;
                    mensagemPortugues2.Idioma = negocioIdiomas.ObterPorSigla(idiomaPortugues);
                    mensagemPortugues2.TextoMensagem = this.txtMensagemPortugues2.Text;
                    mensagemPortugues2.Validada = this.chkValidarAuto.Checked; ;
                    resource2.ListaMensagens.Add(mensagemPortugues2);
                }

                //Mensagem Espanhol
                Entidades.Mensagem mensagemEspanhol2 = new Entidades.Mensagem();
                {
                    this.preencherDataUsuarioMensagem(ref mensagemEspanhol2);
                    mensagemEspanhol2.Proposito = this.txtPropositoMensagem2.Text;
                    mensagemEspanhol2.Idioma = negocioIdiomas.ObterPorSigla(idiomaEspanhol);
                    mensagemEspanhol2.TextoMensagem = this.txtMensagemEspanhol2.Text;
                    mensagemEspanhol2.Validada = this.chkValidarAuto.Checked; ;
                    resource2.ListaMensagens.Add(mensagemEspanhol2);
                }

                //Mensagem Inglês
                Entidades.Mensagem mensagemIngles2 = new Entidades.Mensagem();
                {
                    this.preencherDataUsuarioMensagem(ref mensagemIngles2);
                    mensagemIngles2.Proposito = this.txtPropositoMensagem2.Text;
                    mensagemIngles2.Idioma = negocioIdiomas.ObterPorSigla(idiomaIngles);
                    mensagemIngles2.TextoMensagem = this.txtMensagemIngles2.Text;
                    mensagemIngles2.Validada = this.chkValidarAuto.Checked; ;
                    resource2.ListaMensagens.Add(mensagemIngles2);
                }

                _apresentacao.Inserir(resource2);
            }
            this.SalvarPerfil();

            //ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "script", "abrepopup('RelatorioMensagens.aspx','1024','768','0','0','no','no','no','yes');", true);
        }

        /// <summary>
        /// SalvarPerfil
        /// </summary>
        private void SalvarPerfil()
        {
            Entidades.Perfil perfil = new Entidades.Perfil();
            {
                this.preencherDataUsuarioPerfil(ref perfil);
                perfil.UsuarioPerfil = this.ObterIdUsuarioPorLogin();
                perfil.PerfilSalvo = this.txtResourceKey1.Text;
            }

            Negocio.Perfil _perfilNegocio = new Negocio.Perfil();
            _perfilNegocio.Inserir(perfil);
        }

        /// <summary>
        /// ExibirPanelResMsg2
        /// </summary>
        /// <param name="p"></param>
        private void ExibirPanelResMsg2(bool blnExibe)
        {
            this.pnlResourceMensagem2.Visible = blnExibe;
        }

        /// <summary>
        /// HabilitaResourceKey1
        /// </summary>
        /// <param name="p"></param>
        private void HabilitaResourceKey1(bool blnHabilita)
        {
            this.txtResourceKey1.Enabled = blnHabilita;
        }

        /// <summary>
        /// HabilitaResourceKey2
        /// </summary>
        /// <param name="p"></param>
        private void HabilitaResourceKey2(bool blnHabilita)
        {
            this.txtResourceKey2.Enabled = blnHabilita;
        }

        private void HabilitaSalvar(bool blnHabilita)
        {
            this.btnSalvar.Enabled = blnHabilita;
        }

        /// <summary>
        /// NovoRegistro
        /// </summary>
        private void NovoRegistro()
        {
            this.LimparErros();
            this.LimparCampos(false);
            this.ExibirPanelResMsg2(false);
            this.HabilitaResourceKey1(false);
            this.HabilitaResourceKey2(false);
            this.HabilitaSalvar(true);
            this.AlteraStatusPagina("I");
        }

        /// <summary>
        /// AlterarRegistro
        /// </summary>
        private void AlterarRegistro(int rowIndex)
        {
            this.LimparErros();
            this.LimparCampos(true);
            this.ExibirPanelResMsg2(false);
            this.HabilitaResourceKey1(false);
            this.HabilitaResourceKey2(false);
            this.HabilitaSalvar(true);
            this.AlteraStatusPagina("A");
            this.ExibeDetalheRegistro(rowIndex);
        }

        #endregion [ Métodos Privados ]

        #region [ IApresentacao Members ]

        /// <summary>
        /// EnviarMensagem
        /// </summary>
        /// <param name="mensagem"></param>
        public void EnviarMensagem(string mensagem)
        {
            ScriptManager.RegisterClientScriptBlock(this,
                                                    this.GetType(),
                                                    "script", "alert(" + mensagem + ");",
                                                    true);
        }

        /// <summary>
        /// EnviarMensagemErro
        /// </summary>
        /// <param name="mensagem"></param>
        public void EnviarMensagemErro(string mensagem)
        {
            ScriptManager.RegisterClientScriptBlock(this,
                                                    typeof(MensagensResources),
                                                    "ErroMsgAlert",
                                                    string.Format("alert('{0}');", mensagem),
                                                    true);
        }

        /// <summary>
        /// EnviarMensagemValidacao
        /// </summary>
        /// <param name="validacoes"></param>
        public void EnviarMensagemValidacao(IEnumerable<ValidacaoEntidade> validacoes)
        {
            foreach (var validacao in validacoes)
                EnviarMensagemValidacao(validacao);
        }

        /// <summary>
        /// EnviarMensagemValidacao
        /// </summary>
        /// <param name="validacao"></param>
        public void EnviarMensagemValidacao(ValidacaoEntidade validacao)
        {
            if ((validacao.NomePropriedade == "ResourceKey") || (validacao.NomePropriedade == "TextoMensagem"))
            {
                lblResourceKey.CssClass = "erro";
                lblResourceKey.Text = validacao.Mensagem;
            }

            lblMensagem.CssClass = "erro";
            lblMensagem.Text = "Verifique as informações abaixo...";
        }

        #endregion [ IApresentacao Members ]

        protected void lnkGrid_Click(object sender, EventArgs e)
        {
            string[] parametros = Request.Params.Get("__EVENTARGUMENT").Split(new char[] { '|' });

            if (parametros.Length >= 9)
            {
                LimparErros();
                IniciaGrid(parametros);
                updGrid.Update();

                ScriptManager.RegisterClientScriptBlock(this,
                                        typeof(MensagensResources), "anchor",
                                        "setTimeout(\"document.location.href='#anchorGrid'\",160);",
                                        true);
            }
        }
    }
}
